﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Text;
using BibliotecaProjeto.persistencia;
using System.Data.SqlClient;
using BibliotecaProjeto.estacao;
using System.Windows.Forms;

namespace BibliotecaProjeto.estacao
{
    public class DadosEstacao : persistencia.ConexaoSqlServer
    {
        ConexaoSqlServer conexao = new ConexaoSqlServer();


        #region Atributos
        private string instSql;
        #endregion

        #region Construtores
        /// <summary>
        /// Construtor da Classe
        /// </summary>
        #endregion
        public DadosEstacao() { }

        // Método cadastrar
        public void cadastrar(Estacao estacao)
        {
            SqlCommand cmd = conBD.CreateCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "inserirEstacao";

            cmd.Parameters.Add(new SqlParameter("@codigo", estacao.codigo));
            cmd.Parameters.Add(new SqlParameter("@nome", estacao.nome));
            cmd.Parameters.Add(new SqlParameter("@quantBic", estacao.quantidadeBicicletas));
            cmd.Parameters.Add(new SqlParameter("@pontoRef", estacao.pontoReferencia));
            cmd.Parameters.Add(new SqlParameter("@rua", estacao.rua));
            cmd.Parameters.Add(new SqlParameter("@bairro", estacao.bairro));
            cmd.Parameters.Add(new SqlParameter("@cidade", estacao.cidade));
            cmd.Parameters.Add(new SqlParameter("@uf", estacao.uf));
            cmd.Parameters.Add(new SqlParameter("@país", estacao.país));

            cmd.Prepare();
            abrirConexao();
            cmd.ExecuteNonQuery();
            fecharConexao();
        }


        // Método atualizar
        public void atualizar(Estacao estacao)
        {
            try
            {
                abrirConexao();
                instSql = "update estacao set nome = '" + estacao.nome + "', quantidadeBicicletas = " + estacao.quantidadeBicicletas + ", pontoReferencia = " + estacao.pontoReferencia + " where matricula = " + estacao.codigo + "";
                fecharConexao(); ;
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao atualizar estacao: " + ex.Message);
            }
        }

        //método remover
        public void remover(Estacao estacao)
        {
            try
            {
                abrirConexao();
                instSql = "delete from estacao where codigo = '" + estacao.codigo + "'";
                fecharConexao();
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao remover estacao: " + ex.Message);
            }
        }


        //método buscar estacao
        public List<Estacao> buscar(Estacao e)
        {
            List<Estacao> retorno = new List<Estacao>();


            try
            {
                abrirConexao();

                SqlCommand cmd = conBD.CreateCommand();

                cmd = new SqlCommand("SELECT est_codigo,est_nome FROM estacao where est_codigo = @codigoEst", conBD);

                cmd.Parameters.Add("@codigoEst", SqlDbType.NVarChar, 6);
                cmd.Prepare();
                cmd.Parameters["@codigoEst"].Value = e.codigo;

                SqlDataReader DbReader = cmd.ExecuteReader();

                if (DbReader.HasRows)
                {
                    while (DbReader.Read())
                    {

                        e.codigo = DbReader.GetString(DbReader.GetOrdinal("est_codigo"));
                        e.nome = DbReader.GetString(DbReader.GetOrdinal("est_nome"));
                        retorno.Add(e);
                    }
                }
                else
                    MessageBox.Show("Nenhum resultado encontrado");

                DbReader.Close();
                cmd.ExecuteNonQuery();
                fecharConexao();

            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao conectar: " + ex.Message);

            }

            return retorno;
        }
    }
}
